<template >
  <slot />
</template>

<script>

import CocosWrap from '../util/CocosWrap.js'

export default {
  name: 'Node',

  props: {
    nodeComps:{type: Array,default: () => []},
    nodeProps:{type:Object,default:()=>{return {}}},
  },

  watch: {
    "nodeComps":{
      handler(newv,oldv){
        // console.log("node watch nodeComps",newv,oldv);
        this.updateNodeComps(this.ccnode,oldv,newv);
      }
    },
    "nodeProps":{
      handler(newv,oldv){
        // console.log("node watch nodeProps",newv,oldv);
        this.updateNodeProps(this.ccnode,oldv,newv);
      }
    },
  },

  created() {
    // console.log("node created",this.nodeProps,this.nodeComps,this.$parent.ccnode);
    this.createNode();
  },

  // beforeUpdate(nv,ov){
  //   console.log("node beforeUpdate",nv,ov);
  // },

  // updated(nv,ov){
  //   console.log("node updated",nv,ov);
  // },

  beforeUnmount () {
    // console.log("node beforeUnmount");
    if(this.ccnode){
      this.ccnode.removeFromParent();
    }
  },

  methods: {
    //////////////////////////
    // 下面函数用来替换
    createNode() {
      if (!this.ccnode) {
        this._createNode(this.nodeProps,this.nodeComps);
      }
    },
    updateNodeProps(node,oldp,newp) {
      // console.log("node updateNodeProps",oldp,newp);
      this._updateNodeProps(node,oldp,newp);
    },
    updateNodeComps(node,oldp,newp) {
      // console.log("node updateNodeComps",oldp,newp);
      this._updateNodeComps(node,oldp,newp);
    },

    //////////////////////////
    // 下面函数提供能力
    _createNode(props,comps) {
      let ccnode = CocosWrap.create(props||{},comps||[]);
      this.ccnode = ccnode;

      let parent = this.$parent.ccnode;
      if(!parent){
        parent = this.$parent.parentnode;
        if(!parent){
          console.log("_createNode no parent",this);
          return;
        }
      }
      ccnode.parent = parent;
    },
    _updateNodeProps(node,oldp,newp) {
      node&&CocosWrap.updateNodeProps(node,oldp||{},newp||{});
    },
    _updateNodeComps(node,oldp,newp) {
      node&&CocosWrap.updateNodeComps(node,oldp||[],newp||[]);
    },
  },

  // created(){
  //   console.log("node created",this);
  // },
  // mounted(){
  //   console.log("node mounted");
  // },
  // provide () {
  //   return {
  //     parentNode: this.curNode
  //   }
  // },
  // inject: {
  //   parentNode: { name: 'parentNode', default: null }
  // },
}
</script>
